package com.party.core.service.mall.impl;

import com.google.common.base.Strings;
import com.party.common.paging.Page;
import com.party.core.dao.read.mall.MallCategoryReadDao;
import com.party.core.dao.write.mall.MallCategoryWriteDao;
import com.party.core.model.BaseModel;
import com.party.core.model.mall.MallCategory;
import com.party.core.model.mall.MallCategoryOutput;
import com.party.core.service.mall.IMallCategoryService;
import com.sun.istack.NotNull;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 商城商品类型接口实现
 * Created by wei.li
 *
 * @date 2017/8/15 0015
 * @time 16:23
 */

@Service
public class MallCategoryService implements IMallCategoryService {

    @Autowired
    private MallCategoryReadDao mallCategoryReadDao;

    @Autowired
    private MallCategoryWriteDao mallCategoryWriteDao;

    /**
     * 商品类型插入
     *
     * @param mallCategory 商品类型
     * @return 插入编号
     */
    @Override
    public String insert(MallCategory mallCategory) {
        BaseModel.preInsert(mallCategory);
        boolean result = mallCategoryWriteDao.insert(mallCategory);
        if (result) {
            return mallCategory.getId();
        }
        return null;
    }

    /**
     * 更新商品类型
     *
     * @param mallCategory 商品类型
     * @return 更新结果（true/false）
     */
    @Override
    public boolean update(MallCategory mallCategory) {
        mallCategory.setUpdateDate(new Date());
        return mallCategoryWriteDao.update(mallCategory);
    }

    /**
     * 逻辑删除商品类型
     *
     * @param id 实体主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean deleteLogic(@NotNull String id) {
        if (Strings.isNullOrEmpty(id)) {
            return false;
        }
        return mallCategoryWriteDao.deleteLogic(id);
    }

    /**
     * 物理删除商品类型
     *
     * @param id 实体主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean delete(@NotNull String id) {
        if (Strings.isNullOrEmpty(id)) {
            return false;
        }
        return mallCategoryWriteDao.delete(id);
    }

    /**
     * 批量逻辑删除
     *
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDeleteLogic(@NotNull Set<String> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return false;
        }
        return mallCategoryWriteDao.batchDeleteLogic(ids);
    }

    /**
     * 批量物理删除
     *
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDelete(@NotNull Set<String> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return false;
        }
        return mallCategoryWriteDao.batchDelete(ids);
    }

    /**
     * 获取商品类型
     *
     * @param id 主键
     * @return 商品类型
     */
    @Override
    public MallCategory get(String id) {
        return mallCategoryReadDao.get(id);
    }

    /**
     * 分页查询
     *
     * @param mallCategory 类型
     * @param page         分页信息
     * @return 类型列表
     */
    @Override
    public List<MallCategory> listPage(MallCategory mallCategory, Page page) {
        return mallCategoryReadDao.listPage(mallCategory, page);
    }

    /**
     * 查询所有类型
     *
     * @param mallCategory 类型
     * @return 类型列表
     */
    @Override
    public List<MallCategory> list(MallCategory mallCategory) {
        return mallCategoryReadDao.listPage(mallCategory, null);
    }

    @Override
    public List<MallCategory> batchList(@NotNull Set<String> ids, MallCategory mallCategory, Page page) {
        return mallCategoryReadDao.batchList(ids, new HashedMap(), page);
    }

    @Override
    public List<MallCategory> getByParentId(String parentId) {
        return mallCategoryReadDao.getByParentId(parentId);
    }

    @Override
    public List<MallCategory> getGoodsCategory(String goodsId) {
        return mallCategoryReadDao.getGoodsCategory(goodsId);
    }

    @Override
    public List<MallCategory> findByName(String name, String parentId) {
        return mallCategoryReadDao.findByName(name, parentId);
    }

    @Override
    public List<MallCategory> selectCategory() {
        return mallCategoryReadDao.selectCategory();
    }

    @Override
    public List<MallCategoryOutput> getAll() {
        return mallCategoryReadDao.getAll();
    }
}
